package hash

import (
	"github.com/sqids/sqids-go"
)

// Hashid 使用sqids算法将数字ID编码为短哈希字符串。
//
// 参数:
//   - id: 要编码的数字ID
//   - minLength: 生成的哈希字符串最小长度
//   - alphabet: 自定义字母表(可选)
//
// 返回值:
//   - string: 编码后的哈希字符串
//
// 注意:
//   - 如果编码失败返回"ERROR"
//   - 默认使用sqids库的默认配置
func Hashid(id uint64, minLength uint8, alphabet string) string {
	hd, _ := sqids.New(sqids.Options{
		MinLength: minLength,
		Alphabet:  alphabet,
	})

	res, err := hd.Encode([]uint64{id})
	if err != nil {
		return "ERROR"
	}
	return res
}

// UnHashid 解码sqids算法生成的哈希字符串为原始数字ID。
//
// 参数:
//   - hashedid: 要解码的哈希字符串
//   - minLength: 哈希字符串的最小长度(需与编码时一致)
//   - alphabet: 自定义字母表(需与编码时一致)
//
// 返回值:
//   - uint64: 解码后的数字ID
//
// 注意:
//   - 如果解码失败返回0
func UnHashid(hashedid string, minLength uint8, alphabet string) uint64 {
	hd, _ := sqids.New(sqids.Options{
		MinLength: minLength,
		Alphabet:  alphabet,
	})
	res := hd.Decode(hashedid)
	if len(res) == 1 {
		return res[0]
	}
	return 0
}
